package liecai_class.day08;

/**
 * Syncronized提供的等待唤醒机制，因其是基于锁对象进行等待唤醒操作，而锁对象只有一个
 * 所有线程都等待在一个锁对象上
 * 所以无法精确控制唤醒的是哪个线程!
 */
public class Demo03 {
    public static void main(String[] args) throws InterruptedException {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    synchronized (Demo03.class){
                        Demo03.class.wait();
                        Thread.sleep(1000);
                        System.out.println("t1执行完成!");
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    synchronized (Demo03.class) {
                        Demo03.class.wait();
                        Thread.sleep(2000);
                        System.out.println("t2执行完成!");
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    synchronized (Demo03.class){
                        Thread.sleep(2000);
                        System.out.println("t3执行完成!");
                        Demo03.class.notify();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}
